// 网络请求工具
const app = getApp()

// 封装请求方法
const request = (url, method = 'GET', data = {}, needToken = true) => {
  return new Promise((resolve, reject) => {
    // 获取全局数据
    const baseUrl = app.globalData.baseUrl
    const token = app.globalData.token || wx.getStorageSync('token')
    
    // 请求头
    let header = {
      'content-type': 'application/json'
    }
    
    // 如果需要token且token存在，则添加到请求头
    if (needToken && token) {
      header['token'] = token
    }
    
    // 发起请求
    wx.request({
      url: baseUrl + url,
      method,
      data,
      header,
      success: (res) => {
        // 如果返回的数据中包含token，则保存
        if (res.data && res.data.data && res.data.data.token) {
          wx.setStorageSync('token', res.data.data.token)
          app.globalData.token = res.data.data.token
          app.globalData.isLogin = true
        }
        resolve(res.data)
      },
      fail: (err) => {
        // 判断是否是token失效
        if (err.statusCode === 401) {
          // token失效，清除本地token
          wx.removeStorageSync('token')
          app.globalData.token = ''
          app.globalData.isLogin = false
          
          // 跳转到登录页
          wx.navigateTo({
            url: '/pages/login/login'
          })
        }
        reject(err)
      }
    })
  })
}

// 导出请求方法
module.exports = {
  // GET请求
  get: (url, data = {}, needToken = true) => {
    return request(url, 'GET', data, needToken)
  },
  // POST请求
  post: (url, data = {}, needToken = true) => {
    return request(url, 'POST', data, needToken)
  }
} 